1. Field of the Invention
The present invention relates generally to two-dimensional and three-dimensional computer-aided design (CAD) drafting systems, and in particular, to a method, apparatus, and article of manufacture for the creation and use of an associative fillet in a 2D or 3D CAD system.
2. Description of the Related Art
The use of computer-aided design (CAD) application programs is well known in the art. CAD application programs are often used to design, develop, and optimize a two-dimensional (2D) or three-dimensional (3D) representation of a product, tools and machinery used in the manufacture of components, and/or in the drafting and design of buildings. When two geometric objects/entities are joined together in a CAD application, there often is need to round the sharp corner at the joint, and/or to make a smooth transition between the two geometric entities to maintain tangency continuity (G1 continuity). Such transitional shapes that represent smooth transitions between two or more geometric entities are called fillets or blends. Fillets in 2D drafting systems are often represented by circular arcs, but they can be arbitrary curves.
Fillets in prior art CAD application programs are independent entities and are not directly associated with the two entities. Accordingly, in the design process, if either one of the two entities is edited, the already created fillet needs to be manually erased and recreated. Such problems may be better understood with an explanation of the use and creation of fillets in the prior art.
FIG. 1A illustrates a fillet created in accordance with the prior art. Most CAD applications (and 2D drafting systems), including AutoCAD™ (available from the assignee of the present invention), contain a tool that creates a fillet 100A between two selected curves 102 and 104 by adding a circular arc (or, in a general case, an arbitrary blending curve) tangent to the two curves 102 and 104 and extending or trimming the curves 102 and 104 to the endpoints of the new arc 100A. The fillet arc 100A is an independent entity not associated with the curves 102 and 104. When the curves 102 and 104 are edited, the already created fillet arc 100A needs to be manually erased and recreated. The creation and editing process is as follows:
(1) (a) Use a “FILLET” command;                (b) Select two existing curves 102 and 104;        (c) Specify radius; and        (d) A new fillet arc 100A is created.        
(2) (a) Edit one or both of the filleted curves 102/104;                (b) The fillet arc 100A does not change.        
(3) Erase the fillet arc 100A.
(4) (a) Use “FILLET” command;                (b) Reselect the same curves 102 and 104;        (c) Specify radius; and        (d) A new fillet arc 100B is created.Steps 2-4 may possibly need to be repeated multiple times. Accordingly, each time one of the existing curves 102 or 104 is edited, the fillet needs to be deleted and recreated.        
FIG. 1B illustrates prior art fillet 100A that is not automatically recalculated when curve 104 of FIG. 1A is independently stretched from its prior end point 106A to its new location 106B. In addition, the apparent intersection of curves 102 and 104 is not utilized. Instead, the top of vertical curve 104 remains the same and the new endpoint 106B is used for the bottom of curve 104.
Some 2D drafting systems support constraints between geometric entities. Such systems allow creating fillets in 2D sketches using constraints that preserve the fillet arc when the curves are edited, but behave non-intuitively and ambiguously. For example, the fillet arc 100A can be defined by tangency constraints between the fillet arc 100A and the to curves 102/104, a radial constraint, and coincidence constraints between the endpoints of the arc and the corresponding endpoints of the to curves 102/104. When any geometric entities 102/104 are edited, the drafting system invokes a constraint solver that automatically changes other geometric entities to satisfy the given constraints.
Defining a fillet 100A by constraints does not guarantee intuitive behavior when the filleted curves 102/104 or the fillet radius is edited. For instance, referring to FIG. 1C, when one curve 104 is edited by the user (i.e., by moving the endpoint 106A to location 106B), the constraint solver may decide to reposition the other curve 102 in order to satisfy the constraints instead of updating the fillet arc 100A. Or, when the fillet arc radius is edited, the constraint solver may decide to reposition the to curves 102/104 instead of repositioning the fillet arc 100A. When the endpoint 106A of the curve 104 is stretched to its new location 106B, as illustrated in FIG. 1C, a prior art constraint solver would likely decide to maintain the fillet arc center fixed as depicted by arc 108, which would not result in the desired behavior in most cases.
In view of the above, what is needed is a method that allows the fillet arcs to automatically update when the filleted curves or the fillet radius is edited. Such an automatic update further needs to behave intuitively and unambiguously.